LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

使用git进行项目管理和团队开发

本文总结了在小学期时学到的一项必备技能——使用git进行项目管理。因为小学期需要大量代码书写,以及会有几个团队合作项目,这个时候使用git进行项目管理和团队开发就十分必要了,在使用过程中也确实极大地提升了代码和合作效率。

outline:

  • 工具安装与配置
  • 具体实现及功能

工具安装

此处所需要的工具只有git。关于git的安装可参考 CSDN:Git 详细安装教程

git的功能十分强大,还是一个很好的shell工具,这里主要要用到的功能是版本控制和与远程仓库相关联的功能。

这里使用的是gitlab进行远程仓库的存储和团队的共享。

上面的教程也提到下载完git之后需要将ssh远程配对,并且要将本地ssh密钥保存好。上面的教程是绑定到了github。可以用之前的密钥再去配置gitlab,也可以使用git指令再生成一个密钥去配置。

这里跟github有一点点小不同的地方。

生成密钥ssh时,应输入的指令为:

$ ssh-keygen -t rsa -C “yourgitlab@email.com”

之后在./ssh文件夹里找到id_rsa的PUB文件后复制粘贴到gitlab的密钥配置中(在gitlab的设置中找到)

查看是否配置成功

  • 输入命令 ssh -T git@gitlab域名.com
  • 或者简单粗暴直接clone工程

选择直接clone,要先索引到要clone的目录下,命令 git clone git@gitlab.com:xxx/xxx.git

成功后,工具的安装和配置就已全部完成。

具体实现

首先明确几个概念

  1. 仓库 仓库就是repository,就是一个目录,目录里面的所有文件都被Git管理起来,每个文件的修改、删除,Git都能跟踪。
  2. 工作区 工作区就是资源管理器里看到的文件。
  3. 暂存区 即我们的代码完成了一个阶段可以暂时使用本地保存一下。被保存到的地方也就是 暂存区。
  4. 远程仓库 与本地仓库相对,是将文件保存到远端去,以防止一些因素导致本地文件的丢失,也方便进行团队协作。
  5. 分支 分支就是远程仓库在主干之外的分仓库,一般团队协作时每个人可以把自己的文件上传到自己的分支上去,以防止对主干的干扰,同时也不需要经常从远端pull下来应对一些改变。

明确了这些,就可以进行操作。

上传流程

首先选择一个文件夹做自己的本地仓库,来使git帮我们管理这个文件夹,这里使用

git init

之后git会创建.git隐藏文件夹,然后这个文件夹git就开始管理了。

之后 我们完成了一段代码,保存之后想让git保管一下,首先要git add,这里有两个指令

git add filename   # 将文件添加到暂存区

git add    # 将本地仓库所有的文件添加到暂存区

关于暂存区,上面已经提到。暂存区的意义不大,要想让git管理还要一步是将文件上传到本地分支上,即指令

git commit -m "提交说明"   # 使用commit将暂存区的文件进行提交到本地的分支

提交说明里的内容可以随意,最后会显示到gitlab上的提交记录上。add指令可以让我们不用把文件一个一个地commit,可以add一些之后一块commit到本地仓库。

以上是基本指令,还有一些指令可以辅助我们完成一些功能:

git commit -am "本次提交的说明"   # add 和 commit 的合并,便捷写法,未跟踪的文件是无法提交

# 以下两个指令:跳过验证自动提交
git commit --no-verify
git commit -n

git commit --amend  # 撤销上一次提交,并将暂存区文件重新提交,编辑器会弹出上一次提交的信息,可以在这里修改提交信息

git commit --amend -m "本次提交的说明"  # 修复提交,同时修改提交信息

git commit --amend --no-edit  # 修改文件内容并合并到上一次的commit变更当中,但不修改提交的信息

关于amend的使用,可以参考一下这篇回答,个人比较喜欢:git commit –amend命令

同时还可以查看工作区和暂存区和与远程仓库的状态,用指令

git status

查看的样子是这样

vtPjdH.png

上面那句话的意思是 本地仓库比远程仓库多了一个commit,还没有传到远程仓库。

下面的意思是这个文件夹下的.vscode这个文件还没有被git跟踪。

以及 查看提交记录:

git log

接下来,就要做本地与远程仓库的关联。一般有两种方式,分别是ssh和http,在gitlab的该仓库中的clone那里都可以找到链接,从而进行关联。使用的指令都是

git remote add origin +链接

关联后自动关联到main或master分支,若要推送到远程仓库只需

git push origin +分支名

若远程仓库发生变化,则需先

git pull

这里要区分一下git pull、git fetch、git clone。

git pull = git fetch(只是保存到本地) + git merge

git clone是从无到有的过程,即本地没有版本库时使用。

分支管理

分支管理的目的就是将当前已经可以发布模块放在一个分支,在另外一个分支进行进一步开发,开发完成后可以进行分支合并。

在gitlab上默认的分支是master(主分支),也只有这一个分支,其他分支我们自行建立。

分支的主要操作:

git branch  # 查看分支(*指向的为当前的分支)

git branch<name>  # 创建分支

git checkout<name>  # 切换分支

git checkout -b <name>  # 创建加切换分支

git merge <name>  # 合并某分支到当前分支

git branch -d<name>  # 删除分支

本地新建分支后,远程仓库也自动建立分支,并将操作同步到该分支上进行改变。

在实际的开发中,一般master主分支是受保护的,也就是说只有项目的负责人才有权限在master分支上进行相关的操作,其他普通开发者只能向各自分支进行推送,那么普通开发者怎么才能让负责人知道自己可以合并分支,这就需要在gitlab上发起合并请求,负责人收到请求后开始合并。

分支合并时很大可能会出现冲突,即两相同文件的内容不一样,这个时候就要解决冲突,即选择其中一个为最终版本再进行合并。

可以用git status 查看冲突的文件,再用cat去查看。git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中HEAD代表当前的代码,>>>>代表其他版本冲突的代码,我们打开冲突的文件,将代码冲突进行修改之后,将HEAD,>>>等标志删除之后重新进行提交(add-commit)即可。提交完成后再merge合并即可。

若推送到远程出现冲突时,则先用git pull(上面有所提到)在拉取完成后,会自动提示我们冲突的文件,我们按照相同的方式进行修改后重新提交推送即可。

版本回退

当我们在开发的时候,将文件进行添加到暂存区然后提交到本地的版本库。版本库会将我们每一次的操作来进行一次存档。那么久方便我们很容易回退到某个版本。

我们可以使用 git diff HEAD – filename 命令可以查看工作区和版本库里面最新版本的区别,如果确定需要回退,那就按照下述的方式来进行回退。我们分几个情境来进行版本回退

1、当前编辑的文件还没有提交到暂存区

如果只是做了简单的修改,我们可以手动恢复到我们想要的状态,但是加入修改过多,已经忘记自己修改了什么内容,那么使用

git checkout – file 可以丢弃工作区的修改,在这里可能有两种情况:

一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。简单说就是让这个文件回到最近一次git commit或git add时的状态。

2、文件已经提交到了暂存区但是并没有提交到本地的版本库

git reset HEAD 可以把暂存区的修改撤销掉(unstage),重新放回工作区。git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

使用checkout 就可以丢弃工作区的修改了。

3、已经将文件存储到暂存区并提交到了本地版本库

当我们进行回退的时候,要知道我们要回退到哪个版本,在git中使用HEAD表示当前的版本,那么如果要是回退到上个版本的话就是使用: git reset –hard HEAD^ 我们的版本就会被还原到上一个版本,使用HEAD^可以回退到上上一个版本,当然==再往上100个版本写100个比较容易数不过来,所以写成HEAD~100。

在使用git reset的时候,有两个参数可以选择,分别是git reset –hard/soft,hard和soft的主要区别在于,soft只是回退了commit的信息,也就是指向之前的commit信息,但是对应的文件并不会发生改变。而使用hard方式commit信息会指向之前的信息,同时在工作区的文件也会跟随者进行变化。

4、当我们回退后又想前进到回退前的版本,git也提供了对应的操作方式

我们可以使用 git reflog 命令查看操作记录,来判断我们要回到哪个版本。

删除文件恢复

在git中,删除也是一个修改操作,一般会有以下两种操作。

1、误删除文件(已经add或者已经commit)

在本机上将文件进行删除后,我们介可以使用git status检测到文件的变动。但是原来的文件必须是已经add操作的

使用git checkout – 误删除文件名称,和上文介绍的恢复工作区状态的指令相同。

2、确定要删除文件

当我们在资源管理器将某个文件删除,使用git status 会提示我们使用 git rm 进行删除文件

使用 git rm (文件名称 然后进行commit

当然也可以使用git add . 来添加全部修改或新增的文件

注意,当我们没有进行add 和commit操作的时候我们是无法从原来的版本库进行恢复的,也就是直接新建一个文件,没有经过任何操作,是无法恢复的。

总结

以上是关于git的一些基本操作,还有一些比如分支和版本回退的延伸,目的都是为了高效地团队协作,无需再通过社交媒体发送文件的方式。同时也能方便自己在修改代码时能够及时回退之前的版本,而且能直观看出不同之处。git的版本控制是一个太过方便和强大的功能,这里我仅仅是根据自己的所学和一些尝试实践做的一点总结。相信以后会越来越多地使用到这个工具。